import time

from appium import webdriver
import unittest
from appium.webdriver.common.appiumby import AppiumBy

"""
    1、如果 想要 通过 python 编写  app 的自动化测试脚本  ，需要使用  appium 客户端的服务 以及 appium 的模块
    2、 pypi：pip install Appium-Python-Client
"""


class MyAppiumTestCase(unittest.TestCase):
    driver = None

    @classmethod
    def setUpClass(cls) -> None:
        desired_caps = dict(
            platformName='Android',
            deviceName='127.0.0.1:62001',
            appActivity='com.handsgo.jiakao.android.splash.Login',
            appPackage='com.handsgo.jiakao.android',
            # noReset='true',  # 重置数据
        )
        cls.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

        # 隐式等待
        cls.driver.implicitly_wait(40)

    def test_jia_kao(self):
        """测试驾考宝典初始化"""

        # 1、点击 同意 并继续
        self.driver.find_element(AppiumBy.ID, "com.handsgo.jiakao.android:id/btn_agree").click()

        # 点击 不再提醒
        self.driver.find_element(AppiumBy.ID, "com.handsgo.jiakao.android:id/permission_box").click()

        # 知道了
        self.driver.find_element(AppiumBy.ID, "com.handsgo.jiakao.android:id/permission_btn").click()

        # 允许获取位置
        self.driver.find_element(AppiumBy.ID, "com.android.packageinstaller:id/permission_allow_button").click()

        # 考试城市
        self.driver.find_element(AppiumBy.ID, "com.handsgo.jiakao.android:id/cityTv").click()

        # 选择考试城市 上海
        self.driver.find_element(AppiumBy.XPATH,
                                 "//android.widget.LinearLayout[1]/android.view.ViewGroup/android.widget.TextView[1]").click()

        # 选择性别
        self.driver.find_element(AppiumBy.ID, "com.handsgo.jiakao.android:id/maleTv").click()

        # 下一步
        self.driver.find_element(AppiumBy.ID, "com.handsgo.jiakao.android:id/okBtn").click()

        # 定位 是否出现 特殊元素
        try:
            toast = self.driver.find_element(AppiumBy.XPATH, "//*contains(@text,'请选择您的')")
            print(toast.text)

            if toast.text is '请选择您的考试城市':
                # 选择性别
                self.driver.find_element(AppiumBy.ID, "com.handsgo.jiakao.android:id/maleTv").click()

                # 下一步
                self.driver.find_element(AppiumBy.ID, "com.handsgo.jiakao.android:id/okBtn").click()
            else:
                pass
        except Exception as e:
            print('正常')

        time.sleep(3)

        # 截图操作
        self.driver.save_screenshot('/resources/jiakao.png')

        # 点击 已报名 按钮
        self.driver.find_element(AppiumBy.XPATH,
                                 "//android.widget.LinearLayout[2]/android.widget.LinearLayout/android.widget.TextView[1]").click()

        # 在 搜索驾校的 文本边框中 输入搜索信息 然后选择 一个驾校
        self.driver.find_element(AppiumBy.ID, "com.handsgo.jiakao.android:id/edt_search_q").send_keys('安')

        # 选中 安亭驾校
        self.driver.find_element(AppiumBy.XPATH, "//*[@text='安亭驾校']").click()

        # 点击 暂不更新
        self.driver.find_element(AppiumBy.ID, "com.handsgo.jiakao.android:id/btn_cancel").click()

        # 点击 x
        # 在想要 关闭 是否更新 题库的 弹窗上 判断  弹窗是否 又出现
        alert = "com.handsgo.jiakao.android:id/closeIv"
        if self.by_element(alert):
            print('弹窗在')
            self.driver.find_element(AppiumBy.ID, alert).click()
        else:
            print('弹窗不存在')

        # 如果 想要 操作 断言
        page_source = self.driver.page_source
        if page_source.__contains__('科一') or page_source.__contains__('科二') or page_source.__contains__('模拟考试'):
            print('YES')

        else:
            print('No')

    @classmethod
    def tearDownClass(cls) -> None:
        cls.driver.quit()
        # pass

    def by_element(self, element_id):
        try:
            self.driver.find_element(AppiumBy.ID, element_id)
            return True
        except Exception:
            return False


if __name__ == '__main__':
    unittest.main()
